package com.suray.basic.wcs.plc.pojo.oper.lifter.message;

import com.suray.basic.wcs.utils.comm.BaseMessage;
import com.suray.basic.wcs.utils.typedef.Byte;
import com.suray.basic.wcs.utils.typedef.Word;

import java.util.Arrays;

public class LifterWriteBackMessage extends BaseMessage {

    public LifterWriteBackMessage() {
        super("写数据返回", true);
        baseDatas.add(new Byte("固定1", "固定值"));
        baseDatas.add(new Byte("固定2", "固定值"));
        baseDatas.add(new Byte("固定3", "固定值"));
        baseDatas.add(new Byte("固定4", "固定值"));
        baseDatas.add(new Byte("固定5", "固定值"));
        baseDatas.add(new Byte("length", "数据长度"));
        baseDatas.add(new Byte("deviceAddress", "设备地址"));
        baseDatas.add(new Byte("cmd", "命令类型"));
        baseDatas.add(new Word("startAddress", "起始地址"));
        baseDatas.add(new Word("addressNum", "地址数"));
    }

    /**
     * 前五位为固定0；
     * 第六位为后有效数字位数；
     * 第七位为从站地址；
     * 第八位为功能码；
     * 第九至十位为起始地址；
     * 第十一至十二位为要从起始位置往后写入的地址位数。
     * @param data
     */
    public void analyzeMessage(byte[] data) {
//        if (data.length != getMessageSize()) {
//            throw new RuntimeException("数据长度不对，接收到的数据长度：" + data.length + ", 正确的数据长度：" + getMessageSize());
//        }

        if ((data.length - 6) != data[5]) {
            throw new RuntimeException("数据长度读取错误，数据可能丢失:" + Arrays.toString(data));
        }

        readMessage(data);
    }
}
